lexer grammar TLexerGramatica;

options {
  language = Java;
}

@header {
    package lexer;
}



    //TOCKENS PARA CADA CARACTER O GRUPO DE CARACTERES UTILIZADOS EN LAS REGLAS
    ASSIGN                  : '='               ;
    COLON                   : ':'               ;
    COMMA                   : ','               ;
    DEC                     : '--'              ;
    DIV                     : '/'               ;
    DIV_ASSIGN              : '/='              ;
    DOT                     : '.'               ;
    LEQUAL                   : '=='             ;
    GREATER_OR_EQUAL        : '>='              ;
    GREATER_THAN            : '>'               ;
    INC                     : '++'              ;
    LBRACK                  : '['               ;
    LCURLY                  : '{'               ;
    LESS_OR_EQUAL           : '<='              ;
    LESS_THAN               : '<'               ;
    LOGICAL_NOT             : '!'               ;
    LPAREN                  : '('               ;
    MINUS                   : '-'               ;
    MINUS_ASSIGN            : '-='              ;
    MOD                     : '%'               ;
    MOD_ASSIGN              : '%='              ;
    NOT_EQUAL               : '!='              ;
    PLUS                    : '+'               ;
    PLUS_ASSIGN             : '+='              ;
    QUESTION                : '?'               ;
    RBRACK                  : ']'               ;
    RCURLY                  : '}'               ;
    RPAREN                  : ')'               ;
    FINALLINEA              : ';'               ;
    STAR                    : '*'               ;
    STAR_ASSIGN             : '*='              ;
    XOR_ASSIGN              : '^='              ;
    AND_W                   : 'AND'             ;
    OR_W                    : 'OR'              ;
    NOT_W                   : 'NOT'             ;
    LESS_GREATER            :  '<>'             ;
    FUNCTION_X              : 'funcionX'        ;
    FUNCTION_Y              : 'funcionY'        ;
    FUNCTION_Z              : 'funcionZ'        ;
    PRINT                   : 'print'           ;
    IF                      : 'if'              ;
    ELSE                    : 'else'            ;
    DO                      : 'do'              ;
    FOR                     : 'for'             ;
    LENGTH                  : 'length'          ;
    DQUOTE                  : '"'               ;
    DDQUOTE                 : '""'              ;
    TRUE                    : 'true'            ;
    FALSE                   : 'false'           ;
    WHILE                   : 'while'           ;
    NEW_LINE                : '\r'? '\n'        ;
    PWR                     : '^'               ;
    BEGIN                   : 'begin'           ;
    END                     : 'end'             ;
    
    
    

//STRING : '"' (options{greedy=false;}:( ~('\\'|'"') | ('\\' '"')))* '"'; 

STRING
    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"'
    ;
fragment EscapeSequence
        :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\s'|'\''|'\\')
        ;
COMENTARIO : '//' (~('\n'|'\r'))* '\r'? '\n' {$channel=HIDDEN;};


//SE IGNORAN LOS ESPACIOS EN BLANCO SIMPLES, TABS Y NEW LINES
WS  :   ( ' '
        ) {skip();}
    ;
 

 IDENTIFIER
  : LETRA (LETRA|'0'..'9'|'_')*
  ;

DECIMAL_LITERAL : ('0'..'9')+ ('.' ('0'..'9')*)?;


  
//DECLARACION DE DIGITOS Y LETRAS A UTILIZAR EN LA CONFORMACION DE VARIABLES Y VALORES
fragment DIGITO: ('0'..'9');
fragment LETRA: ('a'..'z'|'A'..'Z') ;
